﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Tibet.Entidades;
using System.Data.SqlClient;
using Tibet.Datos;

namespace Tibet.Datos
{
    public class AccesoReglas
    {
        #region Constructor
        public AccesoReglas()
        {
        }
        #endregion 


        #region Conexion
        /// <summary>
        /// Llamar a la clase de conexion
        /// <returns>devuelve la conexion</returns>

        Conexion bd = new Conexion();

        #endregion


        //Metodo que me devuelve todas las reglas que sean de tipo NombreClase
        public List<EntidadRegla> ConsultarReglas(String nombre)
        {
            //Boolean respuestaQuery = false;
            List<EntidadRegla> listaReglas = new List<EntidadRegla>();
            SqlCommand command = new SqlCommand();

            try
            {
                bd.AbrirConexionBd();
                command.Connection = bd.ObjetoConexion();
                command.CommandType = System.Data.CommandType.StoredProcedure; //Tipo de comando que se va a ejecutar
                command.CommandText = "[dbo].[SELReglasPorTipo]"; // Nombre del Procedimiento Almacenado en la Base de Datos
                command.CommandTimeout = 10;
                command.Parameters.AddWithValue("@name", nombre);
                SqlDataReader reader = command.ExecuteReader();

                while (reader.Read())
                {
                    EntidadRegla reglaClases = new EntidadRegla();
                    reglaClases.IdRegla = reader.GetInt32(0);
                    reglaClases.NombreRegla = reader.GetString(1);
                    reglaClases.DescripcionRegla = reader.GetString(2);
                    listaReglas.Add(reglaClases);
                }
                return listaReglas;
            }

            catch (SqlException)
            {
                bd.CerrarConexionBd();
                return null;
            }

            catch (Exception)
            {
                bd.CerrarConexionBd();
                return null;
            }
        }


        //Metodo que me devuelve todas las reglas que sean de tipo NombreClase
        public List<EntidadRegla> ConsultarReglaNombreClases()
        {
           //Boolean respuestaQuery = false;
            List<EntidadRegla> listaReglas = new List<EntidadRegla>();
            SqlCommand command = new SqlCommand();

            try
            {
                bd.AbrirConexionBd();
                command.Connection = bd.ObjetoConexion();
                command.CommandType = System.Data.CommandType.StoredProcedure; //Tipo de comando que se va a ejecutar
                command.CommandText = "[dbo].[SELReglasNombreClase]"; // Nombre del Procedimiento Almacenado en la Base de Datos
                command.CommandTimeout = 10;

                SqlDataReader reader = command.ExecuteReader();

                while (reader.Read())
                {
                    EntidadRegla reglaClases = new EntidadRegla();
                    reglaClases.IdRegla= reader.GetInt32(0);
                    reglaClases.NombreRegla = reader.GetString(1);
                    reglaClases.DescripcionRegla = reader.GetString(2);
                    listaReglas.Add(reglaClases);
                }
                return listaReglas;
            }

            catch (SqlException)
            {
                bd.CerrarConexionBd();
                return null;
            }

            catch (Exception)
            {
                bd.CerrarConexionBd();
                return null;
            }
        }

        //Metodo que me devuelve todas las reglas que sean de tipo NombreAtributo
        public List<EntidadRegla> ConsultarReglaNombreAtributos()
        {
            //Boolean respuestaQuery = false;
            List<EntidadRegla> listaReglas1 = new List<EntidadRegla>();
            SqlCommand command = new SqlCommand();

            try
            {
                bd.AbrirConexionBd();
                command.Connection = bd.ObjetoConexion();
                command.CommandType = System.Data.CommandType.StoredProcedure; //Tipo de comando que se va a ejecutar
                command.CommandText = "[dbo].[SELReglasNombreAtributo]"; // Nombre del Procedimiento Almacenado en la Base de Datos
                command.CommandTimeout = 10;

                SqlDataReader reader = command.ExecuteReader();

                while (reader.Read())
                {
                    EntidadRegla reglaAtributo = new EntidadRegla();
                    reglaAtributo.IdRegla = reader.GetInt32(0);
                    reglaAtributo.NombreRegla = reader.GetString(1);
                    reglaAtributo.DescripcionRegla = reader.GetString(2);
                    listaReglas1.Add(reglaAtributo);
                }
                return listaReglas1;
            }

            catch (SqlException)
            {
                bd.CerrarConexionBd();
                return null;
            }

            catch (Exception)
            {
                bd.CerrarConexionBd();
                return null;
            }
        }

        //Metodo que me devuelve todas las reglas que sean de tipo NombreMetodo
        public List<EntidadRegla> ConsultarReglaNombreMetodos()
        {
            //Boolean respuestaQuery = false;
            List<EntidadRegla> listaReglas2 = new List<EntidadRegla>();
            SqlCommand command = new SqlCommand();

            try
            {
                bd.AbrirConexionBd();
                command.Connection = bd.ObjetoConexion();
                command.CommandType = System.Data.CommandType.StoredProcedure; //Tipo de comando que se va a ejecutar
                command.CommandText = "[dbo].[SELReglasNombreMetodo]"; // Nombre del Procedimiento Almacenado en la Base de Datos
                command.CommandTimeout = 10;

                SqlDataReader reader = command.ExecuteReader();

                while (reader.Read())
                {
                    EntidadRegla reglaMetodo = new EntidadRegla();
                    reglaMetodo.IdRegla = reader.GetInt32(0);
                    reglaMetodo.NombreRegla = reader.GetString(1);
                    reglaMetodo.DescripcionRegla = reader.GetString(2);
                    listaReglas2.Add(reglaMetodo);
                }
                return listaReglas2;
            }

            catch (SqlException)
            {
                bd.CerrarConexionBd();
                return null;
            }

            catch (Exception)
            {
                bd.CerrarConexionBd();
                return null;
            }
        }

        //Metodo que me devuelve todas las reglas que sean de tipo NombreInterface
        public List<EntidadRegla> ConsultarReglaNombreInterfaces()
        {
            //Boolean respuestaQuery = false;
            List<EntidadRegla> listaReglas3 = new List<EntidadRegla>();
            SqlCommand command = new SqlCommand();

            try
            {
                bd.AbrirConexionBd();
                command.Connection = bd.ObjetoConexion();
                command.CommandType = System.Data.CommandType.StoredProcedure; //Tipo de comando que se va a ejecutar
                command.CommandText = "[dbo].[SELReglasNombreInterface]"; // Nombre del Procedimiento Almacenado en la Base de Datos
                command.CommandTimeout = 10;

                SqlDataReader reader = command.ExecuteReader();

                while (reader.Read())
                {
                    EntidadRegla reglaInterface = new EntidadRegla();
                    reglaInterface.IdRegla = reader.GetInt32(0);
                    reglaInterface.NombreRegla = reader.GetString(1);
                    reglaInterface.DescripcionRegla = reader.GetString(2);
                    listaReglas3.Add(reglaInterface);
                }
                return listaReglas3;
            }

            catch (SqlException)
            {
                bd.CerrarConexionBd();
                return null;
            }

            catch (Exception)
            {
                bd.CerrarConexionBd();
                return null;
            }
        }

        //Metodo que me devuelve todas las reglas que sean de tipo NombrePaquete
        public List<EntidadRegla> ConsultarReglaNombrePaquetes()
        {
            //Boolean respuestaQuery = false;
            List<EntidadRegla> listaReglas4 = new List<EntidadRegla>();
            SqlCommand command = new SqlCommand();

            try
            {
                bd.AbrirConexionBd();
                command.Connection = bd.ObjetoConexion();
                command.CommandType = System.Data.CommandType.StoredProcedure; //Tipo de comando que se va a ejecutar
                command.CommandText = "[dbo].[SELReglasNombrePaquete]"; // Nombre del Procedimiento Almacenado en la Base de Datos
                command.CommandTimeout = 10;

                SqlDataReader reader = command.ExecuteReader();

                while (reader.Read())
                {
                    EntidadRegla reglaPaquete = new EntidadRegla();
                    reglaPaquete.IdRegla = reader.GetInt32(0);
                    reglaPaquete.NombreRegla = reader.GetString(1);
                    reglaPaquete.DescripcionRegla = reader.GetString(2);
                    listaReglas4.Add(reglaPaquete);
                }
                return listaReglas4;
            }

            catch (SqlException)
            {
                bd.CerrarConexionBd();
                return null;
            }

            catch (Exception)
            {
                bd.CerrarConexionBd();
                return null;
            }
        }

        //Metodo que me devuelve todas las reglas que sean de tipo Operadores
        public List<EntidadRegla> ConsultarReglaEspacioOperadores()
        {
            //Boolean respuestaQuery = false;
            List<EntidadRegla> listaReglas5 = new List<EntidadRegla>();
            SqlCommand command = new SqlCommand();

            try
            {
                bd.AbrirConexionBd();
                command.Connection = bd.ObjetoConexion();
                command.CommandType = System.Data.CommandType.StoredProcedure; //Tipo de comando que se va a ejecutar
                command.CommandText = "[dbo].[SELReglasOperadores]"; // Nombre del Procedimiento Almacenado en la Base de Datos
                command.CommandTimeout = 10;

                SqlDataReader reader = command.ExecuteReader();

                while (reader.Read())
                {
                    EntidadRegla reglaOperadores = new EntidadRegla();
                    reglaOperadores.IdRegla = reader.GetInt32(0);
                    reglaOperadores.NombreRegla = reader.GetString(1);
                    reglaOperadores.DescripcionRegla = reader.GetString(2);
                    listaReglas5.Add(reglaOperadores);
                }
                return listaReglas5;
            }

            catch (SqlException)
            {
                bd.CerrarConexionBd();
                return null;
            }

            catch (Exception)
            {
                bd.CerrarConexionBd();
                return null;
            }
        }

        //Metodo que me devuelve todas las reglas que sean de tipo Parentesis
        public List<EntidadRegla> ConsultarReglaEspacioParentesis()
        {
            //Boolean respuestaQuery = false;
            List<EntidadRegla> listaReglas6 = new List<EntidadRegla>();
            SqlCommand command = new SqlCommand();

            try
            {
                bd.AbrirConexionBd();
                command.Connection = bd.ObjetoConexion();
                command.CommandType = System.Data.CommandType.StoredProcedure; //Tipo de comando que se va a ejecutar
                command.CommandText = "[dbo].[SELReglasParentesis]"; // Nombre del Procedimiento Almacenado en la Base de Datos
                command.CommandTimeout = 10;

                SqlDataReader reader = command.ExecuteReader();

                while (reader.Read())
                {
                    EntidadRegla reglaParentesis = new EntidadRegla();
                    reglaParentesis.IdRegla = reader.GetInt32(0);
                    reglaParentesis.NombreRegla = reader.GetString(1);
                    reglaParentesis.DescripcionRegla = reader.GetString(2);
                    listaReglas6.Add(reglaParentesis);
                }
                return listaReglas6;
            }

            catch (SqlException)
            {
                bd.CerrarConexionBd();
                return null;
            }

            catch (Exception)
            {
                bd.CerrarConexionBd();
                return null;
            }
        }

        //Metodo que me devuelve todas las reglas que sean de tipo DocumentarClases
        public List<EntidadRegla> ConsultarReglaDocumentarClases()
        {
            //Boolean respuestaQuery = false;
            List<EntidadRegla> listaReglas7 = new List<EntidadRegla>();
            SqlCommand command = new SqlCommand();

            try
            {
                bd.AbrirConexionBd();
                command.Connection = bd.ObjetoConexion();
                command.CommandType = System.Data.CommandType.StoredProcedure; //Tipo de comando que se va a ejecutar
                command.CommandText = "[dbo].[SELReglasDocumentarClase]"; // Nombre del Procedimiento Almacenado en la Base de Datos
                command.CommandTimeout = 10;

                SqlDataReader reader = command.ExecuteReader();

                while (reader.Read())
                {
                    EntidadRegla reglaDocumentarC = new EntidadRegla();
                    reglaDocumentarC.IdRegla = reader.GetInt32(0);
                    reglaDocumentarC.NombreRegla = reader.GetString(1);
                    reglaDocumentarC.DescripcionRegla = reader.GetString(2);
                    listaReglas7.Add(reglaDocumentarC);
                }
                return listaReglas7;
            }

            catch (SqlException)
            {
                bd.CerrarConexionBd();
                return null;
            }

            catch (Exception)
            {
                bd.CerrarConexionBd();
                return null;
            }
        }

        //Metodo que me devuelve todas las reglas que sean de tipo Llaves
        public List<EntidadRegla> ConsultarReglaLlaves()
        {
            //Boolean respuestaQuery = false;
            List<EntidadRegla> listaReglas8 = new List<EntidadRegla>();
            SqlCommand command = new SqlCommand();

            try
            {
                bd.AbrirConexionBd();
                command.Connection = bd.ObjetoConexion();
                command.CommandType = System.Data.CommandType.StoredProcedure; //Tipo de comando que se va a ejecutar
                command.CommandText = "[dbo].[SELReglasLlaves]"; // Nombre del Procedimiento Almacenado en la Base de Datos
                command.CommandTimeout = 10;

                SqlDataReader reader = command.ExecuteReader();

                while (reader.Read())
                {
                    EntidadRegla reglaLlave = new EntidadRegla();
                    reglaLlave.IdRegla = reader.GetInt32(0);
                    reglaLlave.NombreRegla = reader.GetString(1);
                    reglaLlave.DescripcionRegla = reader.GetString(2);
                    listaReglas8.Add(reglaLlave);
                }
                return listaReglas8;
            }

            catch (SqlException)
            {
                bd.CerrarConexionBd();
                return null;
            }

            catch (Exception)
            {
                bd.CerrarConexionBd();
                return null;
            }
        }

        //Metodo que me devuelve todas las reglas que sean de tipo DocumentarEstructura
        public List<EntidadRegla> ConsultarDocumentEstructuras()
        {
            //Boolean respuestaQuery = false;
            List<EntidadRegla> listaReglas9 = new List<EntidadRegla>();
            SqlCommand command = new SqlCommand();

            try
            {
                bd.AbrirConexionBd();
                command.Connection = bd.ObjetoConexion();
                command.CommandType = System.Data.CommandType.StoredProcedure; //Tipo de comando que se va a ejecutar
                command.CommandText = "[dbo].[SELReglasDocumentarEstructura]"; // Nombre del Procedimiento Almacenado en la Base de Datos
                command.CommandTimeout = 10;

                SqlDataReader reader = command.ExecuteReader();

                while (reader.Read())
                {
                    EntidadRegla reglaEstructura = new EntidadRegla();
                    reglaEstructura.IdRegla = reader.GetInt32(0);
                    reglaEstructura.NombreRegla = reader.GetString(1);
                    reglaEstructura.DescripcionRegla = reader.GetString(2);
                    listaReglas9.Add(reglaEstructura);
                }
                return listaReglas9;
            }

            catch (SqlException)
            {
                bd.CerrarConexionBd();
                return null;
            }

            catch (Exception)
            {
                bd.CerrarConexionBd();
                return null;
            }
        }

        //Metodo que me devuelve todas las reglas que sean de tipo DocumentarBoilerplates
        public List<EntidadRegla> ConsultarDocumentBoilerplates()
        {
            //Boolean respuestaQuery = false;
            List<EntidadRegla> listaReglas10 = new List<EntidadRegla>();
            SqlCommand command = new SqlCommand();

            try
            {
                bd.AbrirConexionBd();
                command.Connection = bd.ObjetoConexion();
                command.CommandType = System.Data.CommandType.StoredProcedure; //Tipo de comando que se va a ejecutar
                command.CommandText = "[dbo].[SELReglasDocumentarBoilerplate]"; // Nombre del Procedimiento Almacenado en la Base de Datos
                command.CommandTimeout = 10;

                SqlDataReader reader = command.ExecuteReader();

                while (reader.Read())
                {
                    EntidadRegla reglaDocumentarB = new EntidadRegla();
                    reglaDocumentarB.IdRegla = reader.GetInt32(0);
                    reglaDocumentarB.NombreRegla = reader.GetString(1);
                    reglaDocumentarB.DescripcionRegla = reader.GetString(2);
                    listaReglas10.Add(reglaDocumentarB);
                }
                return listaReglas10;
            }

            catch (SqlException)
            {
                bd.CerrarConexionBd();
                return null;
            }

            catch (Exception)
            {
                bd.CerrarConexionBd();
                return null;
            }
        }

        
        //Metodo que me devuelve todas las reglas que sean de tipo DocumentarMetodo
        public List<EntidadRegla> ConsultarDocumentMetodos()
        {
            //Boolean respuestaQuery = false;
            List<EntidadRegla> listaReglas11 = new List<EntidadRegla>();
            SqlCommand command = new SqlCommand();

            try
            {
                bd.AbrirConexionBd();
                command.Connection = bd.ObjetoConexion();
                command.CommandType = System.Data.CommandType.StoredProcedure; //Tipo de comando que se va a ejecutar
                command.CommandText = "[dbo].[SELReglasDocumentarMetodo]"; // Nombre del Procedimiento Almacenado en la Base de Datos
                command.CommandTimeout = 10;

                SqlDataReader reader = command.ExecuteReader();

                while (reader.Read())
                {
                    EntidadRegla reglaDocumentarM = new EntidadRegla();
                    reglaDocumentarM.IdRegla = reader.GetInt32(0);
                    reglaDocumentarM.NombreRegla = reader.GetString(1);
                    reglaDocumentarM.DescripcionRegla = reader.GetString(2);
                    listaReglas11.Add(reglaDocumentarM);
                }
                return listaReglas11;
            }

            catch (SqlException)
            {
                bd.CerrarConexionBd();
                return null;
            }

            catch (Exception)
            {
                bd.CerrarConexionBd();
                return null;
            }
        }
    }
}
